package atguigu.str;

import java.text.Collator;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class Str3 {

    private static List<String> extractNumbers(String str) {
        List<String> numbers = new ArrayList<String>();
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            numbers.add(matcher.group());
        }
        return numbers;
    }

    private static List<String> sortNameList(Collection<String> names) {
        List<String> nameLst = new ArrayList<>();
        Map<String, List<String>> collect =
                names.stream().collect(Collectors.groupingBy(e -> {
            List<String> strings = extractNumbers(e);
            return strings.get(0);
        }));
        Set<String> strings = collect.keySet();
        List<String> keys = new ArrayList<>(strings);
        Collator instance = Collator.getInstance(Locale.CHINA);
        keys.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return instance.compare(o1,o2);
            }
        });
        for (String name : keys) {
            List<String> lst = collect.get(name);
            lst.sort(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    // 将数字的部分切出来
                    List<String> strings1 = extractNumbers(o1);
                    List<String> strings2 = extractNumbers(o2);
                    String name1 = strings1.get(1);
                    String name2 = strings2.get(1);
                    float v1 = Float.parseFloat(name1);
                    float v2 = Float.parseFloat(name2);
                    return Float.compare(v1,v2);
                }
            });
            nameLst.addAll(lst);
        }
        return nameLst;
    }

    public static void main(String[] args) {
        test2();
    }

    public static void test2(){
        List<String> names = new ArrayList<String>();
        names.add("4.37 保温温度（立体保温产品）");
        names.add("5.48 热饭档热粥");
        names.add("4.21 稀饭功能");
        names.add("4.10 正常煮饭煮粥防溢出试验");
        names.add("4.26 杂粮功能");
        names.add("4.32 蒸煮性能");
        names.add("5.10 提手平衡");
        names.add("3.21 内锅垫块");
        names.add("5.44 内锅的转动力");
        names.add("5.31 连续煮饭试验");
        names.add("4.31 蛋糕功能");
        names.add("4.22 煲汤性能");
        names.add("3.12 蒸汽阀");
        names.add("5.32 各煮饭功能档热水煮饭");
        names.add("4.46 高原性能");
        names.add("4.28 温泉蛋功能");
        names.add("4.25 玄米功能");
        names.add("4.45 热水快速饭");
        names.add("4.36 保温温度（内销产品，强制执行项）");
        names.add("4.12 煮饭防溢出试验");
        names.add("4.27 煲仔饭");
        names.add("4.43 极限温升测试");
        names.add("4.33 八宝粥 杂粮粥性能");
        names.add("4.44 钢板温升测试");
        names.add("4.29 慢炖功能");
        names.add("4.24 婴儿粥");
        names.add("4.34 低温八宝粥 杂粮粥");
        names.add("5.39 密封件强度");
        names.add("4.30 锅巴饭");
        names.add("4.23 冷饭加热");
        names.add("4.11 煮粥防溢出试验");
        names.add("4.1 预约时间偏差");
        names.add("3.23 额定容积");
        names.add("4.35 高温八宝粥 杂粮粥");
        names.add("4.15 超快煮饭");
        names.add("3.19 电路板防虫");
        names.add("4.16 精华煮 柴火饭 香甜饭 寿司饭");
        names.add("5.43 注水绝缘电阻");
        names.add("3.17 温度保险丝安装");
        names.add("4.14 噪音");
        names.add("4.48 无水焗功能");
        names.add("3.9 活动盖板");
        names.add("4.38 内盖滴水性（适合上盖附加加热产品）");
        names.add("3.6 按钮转轴");
        names.add("4.18 煮粥性能");
        names.add("4.19 低温煮粥");
        names.add("3.7 主温控器动作");
        names.add("4.20 高温煮粥");

        names = sortNameList(names);
        for (String name : names) {

            System.out.println(name);
        }

    }

    public static void test1(){
        List<String> names = new ArrayList<>();

        names.add("4.37 保温温度（立体保温产品）");
        names.add("5.48热饭档热粥");
        names.add("4.21 稀饭功能");
        names.add("4.10 正常煮饭煮粥防溢出试验");
        names.add("4.26 杂粮功能");
        names.add("4.32 蒸煮性能");
        names.add("5.10 提手平衡");
        names.add("3.21 内锅垫块");
        names.add("5.44 内锅的转动力");
        names.add("5.31 连续煮饭试验");
        names.add("4.31 蛋糕功能");
        names.add("4.22 煲汤性能");
        names.add("3.12 蒸汽阀");
        names.add("5.32 各煮饭功能档热水煮饭");
        names.add("4.46 高原性能");
        names.add("4.28 温泉蛋功能");
        names.add("4.25 玄米功能");
        names.add("4.45 热水快速饭");
        names.add("4.36 保温温度（内销产品，强制执行项）");
        names.add("4.12 煮饭防溢出试验");
        names.add("4.27 煲仔饭");
        names.add("4.43 极限温升测试");
        names.add("4.33八宝粥 杂粮粥性能");
        names.add("4.44 钢板温升测试");
        names.add("4.29 慢炖功能");
        names.add("4.24 婴儿粥");
        names.add("4.34 低温八宝粥 杂粮粥");
        names.add("5.39 密封件强度");
        names.add("4.30 锅巴饭");
        names.add("4.23 冷饭加热");
        names.add("4.11 煮粥防溢出试验");
        names.add("4.1 预约时间偏差");
        names.add("3.23 额定容积");
        names.add("4.35 高温八宝粥 杂粮粥");
        names.add("4.15 超快煮饭");
        names.add("3.19 电路板防虫");
        names.add("4.16 精华煮 柴火饭 香甜饭 寿司饭");
        names.add("5.43 注水绝缘电阻");
        names.add("3.17 温度保险丝安装");
        names.add("4.14 噪音");
        names.add("4.48 无水焗功能");
        names.add("3.9 活动盖板");
        names.add("4.38 内盖滴水性（适合上盖附加加热产品）");
        names.add("3.6 按钮转轴");
        names.add("4.18 煮粥性能");
        names.add("4.19 低温煮粥");
        names.add("3.7 主温控器动作");
        names.add("4.20 高温煮粥");




        Collator instance = Collator.getInstance(Locale.CHINA);
        names.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // 将数字的部分切出来
                List<String> strings1 = extractNumbers(o1);
                List<String> strings2 = extractNumbers(o2);



                String name1 = strings1.get(0);
                String name2 = strings2.get(0);

                float v1 = Float.parseFloat(name1);
                float v2 = Float.parseFloat(name2);

                return Float.compare(v1,v2);
            }
        });

        for (String name : names) {
            System.out.println(name);
        }
    }
}
